The personal computer (PC) industry has evolved in such a way that end users of personal computers typically obtain the computer as part of a preconfigured system of hardware components with operating system (OS) software and important application software preinstalled. The assembly of the hardware of such a system and the preloading of software is accomplished by original equipment manufacturers (OEMs). OEMs in turn obtain the OS and application software from software vendors and obtain driver software, typically associated with component hardware devices in the system (such as audio, keyboard, display, video, or printer devices), from driver vendors. Particular PC models or configurations manufactured by OEMs are designed with the interests of distinct categories of users in mind.
While this separation and specialization of functions in the production of PC systems benefits end users of computers by providing them with a useful working system at the outset, it also complicates the correction of errors in preinstalled software. Software errors decrease the usefulness and ease of use of PCs and the software programs reboot following the crash. The user is then given the option of submitting crash data over the Internet. Submitted data is stored, sorted and analyzed, and crash reports are made available to appropriate OEMs and driver vendors. The use of crash data from the user's machine is restricted in accordance with a privacy agreement with the user.
The expedited communication of real-world driver errors to OEMs and driver vendors has the potential of enhancing their ability to identify and correct such errors and reduce associated support costs. However, prior to the invention described herein, OCA's effectiveness had been significantly limited by the absence of an efficient means for OCA to obtain more specific hardware-configuration information about the machine on which a system crash occurred. The end user crashes reported by OCA were difficult for driver writers to reproduce and thus to diagnose and correct. It was found that crashes were typically specific to particular PC system models or chipsets, but this was not easy to determine through OCA because of the lack of a simple and efficient means of gathering information identifying a particular PC system by details of its OEM hardware configuration. Previous solutions to the general problem of identifying machines have suffered from costliness and complexity, however. Typically, such solutions have involved engineering changes, or have been dependent on the broad adoption of complex standards among the large number of PC OEMs.